TestNG Parameters
TestNG Parameters – Advanced Guide
Parameters in TestNG allow you to inject external values into tests. They are heavily used for:
- Environment handling
- Browser selection
- CI/CD configuration
- Runtime flexibility
This guide covers advanced parameter usage, pitfalls, and real-world patterns.
1️⃣ What are TestNG Parameters?
TestNG parameters allow passing values from:
testng.xml- Maven command line
- CI/CD pipelines
Into:
- Test methods
- Configuration methods
@Parameters("browser")
@Test
public void launchTest(String browser) {
}
2️⃣ Parameter Hierarchy (VERY IMPORTANT)
TestNG resolves parameters in this order:
Method
↑
Test
↑
Suite
Example
<suite>
<parameter name="env" value="qa"/>
<test name="Regression">
<parameter name="env" value="uat"/>
@Parameters("env")
@Test
public void testEnv(String env) {
}
➡️ Value used: uat
3️⃣ @Optional – Preventing Failures ⭐
If a parameter is missing, TestNG fails by default.
Without @Optional ❌
@Parameters("browser")
@Test
public void test(String browser) {
}
Missing parameter → TestNGException
With @Optional ✅
@Parameters("browser")
@Test
public void test(@Optional("chrome") String browser) {
}
Best practice:
- Always use
@Optionalfor non-critical parameters
4️⃣ Parameters in Configuration Annotations
Parameters can be injected into:
@BeforeSuite@BeforeTest@BeforeClass@BeforeMethod
Example:
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
}
Common usage:
- Driver initialization
- Environment setup
5️⃣ Parameters vs DataProviders (CRITICAL DIFFERENCE)
| Parameters | DataProvider |
|---|---|
| External config | Test data |
| One value per run | Multiple data rows |
| From XML / CLI | From code |
| Used for env/browser | Used for validation data |
➡️ Never use Parameters for test data
6️⃣ Parameters from Maven & CI/CD
Maven Command Line
mvn test -Dbrowser=chrome
Access in TestNG
@Parameters("browser")
CI tools inject parameters this way.
7️⃣ Combining Parameters + DataProvider ⭐
This is a very common real-world pattern.
@Parameters("env")
@Test(dataProvider = "loginData")
public void loginTest(String env, String user, String pass) {
}
env→ environment controluser/pass→ test data
8️⃣ Common Mistakes ❌
- Using Parameters for test data
- Forgetting
@Optional - Hardcoding environment values
- Duplicating same parameter everywhere
- Mixing XML parameters and system properties blindly
9️⃣ Best Practices (Senior-Level)
- Use Parameters for configuration only
- Use
@Optionaldefensively - Prefer Maven profiles for environment
- Keep parameter names consistent
- Document parameters clearly
- Avoid overusing XML parameters
🔟 Parameters & CI/CD Strategy
Recommended flow:
CI Tool
↓
Maven Profile
↓
System Property
↓
TestNG Parameter
This ensures:
- Clean separation
- Easy overrides
- Predictable behavior
Interview-Level Questions
Q: What happens if a parameter is missing?
A: Test fails unless @Optional is used.
Q: Parameters vs DataProvider?
A: Parameters = config, DataProvider = test data.
Key Takeaways 🎯
- Parameters control configuration
- Hierarchy matters
@Optionalprevents failures- Never misuse Parameters as test data
- Essential for CI/CD integration
Status
✅ Advanced Parameters – Covered
✅ TestNG documentation – 100% COMPLETE